home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / gopherlib.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  5KB  |  227 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __all__ = [
  5.     'send_selector',
  6.     'send_query']
  7. import warnings
  8. warnings.warn('the gopherlib module is deprecated', DeprecationWarning, stacklevel = 2)
  9. DEF_SELECTOR = '1/'
  10. DEF_HOST = 'gopher.micro.umn.edu'
  11. DEF_PORT = 70
  12. A_TEXT = '0'
  13. A_MENU = '1'
  14. A_CSO = '2'
  15. A_ERROR = '3'
  16. A_MACBINHEX = '4'
  17. A_PCBINHEX = '5'
  18. A_UUENCODED = '6'
  19. A_INDEX = '7'
  20. A_TELNET = '8'
  21. A_BINARY = '9'
  22. A_DUPLICATE = '+'
  23. A_SOUND = 's'
  24. A_EVENT = 'e'
  25. A_CALENDAR = 'c'
  26. A_HTML = 'h'
  27. A_TN3270 = 'T'
  28. A_MIME = 'M'
  29. A_IMAGE = 'I'
  30. A_WHOIS = 'w'
  31. A_QUERY = 'q'
  32. A_GIF = 'g'
  33. A_HTML = 'h'
  34. A_WWW = 'w'
  35. A_PLUS_IMAGE = ':'
  36. A_PLUS_MOVIE = ';'
  37. A_PLUS_SOUND = '<'
  38. _names = dir()
  39. _type_to_name_map = { }
  40.  
  41. def type_to_name(gtype):
  42.     if _type_to_name_map == { }:
  43.         for name in _names:
  44.             if name[:2] == 'A_':
  45.                 _type_to_name_map[eval(name)] = name[2:]
  46.                 continue
  47.         
  48.     
  49.     if gtype in _type_to_name_map:
  50.         return _type_to_name_map[gtype]
  51.     
  52.     return 'TYPE=%r' % (gtype,)
  53.  
  54. CRLF = '\r\n'
  55. TAB = '\t'
  56.  
  57. def send_selector(selector, host, port = 0):
  58.     import socket as socket
  59.     if not port:
  60.         i = host.find(':')
  61.         if i >= 0:
  62.             host = host[:i]
  63.             port = int(host[i + 1:])
  64.         
  65.     
  66.     if not port:
  67.         port = DEF_PORT
  68.     elif type(port) == type(''):
  69.         port = int(port)
  70.     
  71.     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  72.     s.connect((host, port))
  73.     s.sendall(selector + CRLF)
  74.     s.shutdown(1)
  75.     return s.makefile('rb')
  76.  
  77.  
  78. def send_query(selector, query, host, port = 0):
  79.     return send_selector(selector + '\t' + query, host, port)
  80.  
  81.  
  82. def path_to_selector(path):
  83.     if path == '/':
  84.         return '/'
  85.     else:
  86.         return path[2:]
  87.  
  88.  
  89. def path_to_datatype_name(path):
  90.     if path == '/':
  91.         return "TYPE='unknown'"
  92.     else:
  93.         return type_to_name(path[1])
  94.  
  95.  
  96. def get_directory(f):
  97.     entries = []
  98.     while None:
  99.         line = f.readline()
  100.         if not line:
  101.             print '(Unexpected EOF from server)'
  102.             break
  103.         
  104.         if line[-2:] == CRLF:
  105.             line = line[:-2]
  106.         elif line[-1:] in CRLF:
  107.             line = line[:-1]
  108.         
  109.         if line == '.':
  110.             break
  111.         
  112.         if not line:
  113.             print '(Empty line from server)'
  114.             continue
  115.         
  116.         gtype = line[0]
  117.         parts = line[1:].split(TAB)
  118.         if len(parts) < 4:
  119.             print '(Bad line from server: %r)' % (line,)
  120.             continue
  121.         
  122.         if len(parts) > 4:
  123.             if parts[4:] != [
  124.                 '+']:
  125.                 print '(Extra info from server:', parts[4:], ')'
  126.             
  127.         else:
  128.             parts.append('')
  129.         entries.append(parts)
  130.         continue
  131.         return entries
  132.  
  133.  
  134. def get_textfile(f):
  135.     lines = []
  136.     get_alt_textfile(f, lines.append)
  137.     return lines
  138.  
  139.  
  140. def get_alt_textfile(f, func):
  141.     while None:
  142.         line = f.readline()
  143.         if not line:
  144.             print '(Unexpected EOF from server)'
  145.             break
  146.         
  147.         if line[-2:] == CRLF:
  148.             line = line[:-2]
  149.         elif line[-1:] in CRLF:
  150.             line = line[:-1]
  151.         
  152.         if line == '.':
  153.             break
  154.         
  155.         if line[:2] == '..':
  156.             line = line[1:]
  157.         
  158.         continue
  159.         return None
  160.  
  161.  
  162. def get_binary(f):
  163.     data = f.read()
  164.     return data
  165.  
  166.  
  167. def get_alt_binary(f, func, blocksize):
  168.     while None:
  169.         data = f.read(blocksize)
  170.         if not data:
  171.             break
  172.         
  173.         continue
  174.         return None
  175.  
  176.  
  177. def test():
  178.     import sys as sys
  179.     import getopt as getopt
  180.     (opts, args) = getopt.getopt(sys.argv[1:], '')
  181.     selector = DEF_SELECTOR
  182.     type = selector[0]
  183.     host = DEF_HOST
  184.     if args:
  185.         host = args[0]
  186.         args = args[1:]
  187.     
  188.     if args:
  189.         type = args[0]
  190.         args = args[1:]
  191.         if len(type) > 1:
  192.             type = type[0]
  193.             selector = type
  194.         else:
  195.             selector = ''
  196.             if args:
  197.                 selector = args[0]
  198.                 args = args[1:]
  199.             
  200.         query = ''
  201.         if args:
  202.             query = args[0]
  203.             args = args[1:]
  204.         
  205.     
  206.     if type == A_INDEX:
  207.         f = send_query(selector, query, host)
  208.     else:
  209.         f = send_selector(selector, host)
  210.     if type == A_TEXT:
  211.         lines = get_textfile(f)
  212.         for item in lines:
  213.             print item
  214.         
  215.     elif type in (A_MENU, A_INDEX):
  216.         entries = get_directory(f)
  217.         for item in entries:
  218.             print item
  219.         
  220.     else:
  221.         data = get_binary(f)
  222.         print 'binary data:', len(data), 'bytes:', repr(data[:100])[:40]
  223.  
  224. if __name__ == '__main__':
  225.     test()
  226.  
  227.